Come integrare modulo e script nello stesso file e gestione degli errori.
Nelle precedenti lezioni, quando abbiamo
creato un interazione tra HTML e PHP, abbiamo sempre utilizzato due file
distinti e separati. Un primo file contenente l'interfaccia utente per
l'inserimento dei dati (il modulo) ed un secondo file contenente lo script PHP
per la manipolazione dei dati contenuti nello stesso.
In questa lezione vedremo come possiamo aggregare in un solo file sia il modulo
che lo script tramite una variabile d'ambiente chiamata PHP_SELF inserita
nell'attributo ACTION del modulo.
Apriamo il Blocco Note (o Notepad) di Windows e cominciamo a scrivere il nostro
unico file come segue:
<html><head><title>Modulo completo</title></head>
<body>
<?
$blocco_modulo = "
<form method=\"post\" action=\"$PHP_SELF\">
<p><b>Tuo nome:</b><br><input type=\"text\" name=\"nome\" size=30>
<p><b>Tua e-mail:</b><br><input type=\"text\"
name=\"email\" size=30>
<p><b>Messaggio:</b><br>
<textarea name=\"messaggio\" cols=30 rows=5 wrap=virtual></textarea>
<p><input type=\"submit\" name=\"Invio\" value=\"Invia il modulo\">
</form> "; ?>
Fino ad ora avevamo visto che, al momento
di inviare i dati del modulo, il server cercava sempre un'altro file che
contenesse lo script di manipolazione dei dati; adesso invece, con la variabile
PHP_SELF inserita nel modulo, ricaricherà la stessa pagina nel browser.
Questa metodologia di programmazione ci permette, inoltre, di inserire il
controllo degli errori nel modulo stesso tramite degli accorgimenti che adesso
andremo a spiegare:
All'interno della variabile $blocco_modulo, che contiene il nostro modulo da
ricaricare, prima del codice HTML per il pulsante di invio creeremo una
variabile nascosta, che chiameremo con (abbreviazione di "controllo"), il
cui valore sarà ok. A questo punto scriviamo anche il codice per il
controllo degli errori ed il nostro modulo avrà queste sembianze:
<html><head><title>Modulo completo</title></head>
<body>
<?
$blocco_modulo = "
<form method=\"post\" action=\"$PHP_SELF\">
<p><b>Tuo nome:</b><br><input type=\"text\" name=\"nome\"
value=\"$nome"\ size=30>
<p><b>Tua e-mail:</b><br><input type=\"text\"
name=\"email\" value=\"$email"\ size=30>
<p><b>Messaggio:</b><br>
<textarea name=\"messaggio\" cols=30 rows=5 wrap=virtual>$messaggio</textarea>
<input type=\"hidden\" name=\"con\" value=\"ok\">
<p><input type=\"submit\" name=\"Invio\" value=\"Invia il modulo\">
</form> ";
if ($con != "ok")
{ echo "$blocco_modulo"; }
else if ($con == "ok")
{
if ($nome == "")
{ $err_nome = "<font color=red>Attenzione! non hai digitato il
tuo nome.</font><br>";
$invia = "no"; }
if ($email == "")
{ $err_email = "<font color=red>Attenzione! non hai digitato
la e-mail.</font><br>";
$invia = "no"; }
if ($messaggio == "")
{ $err_messaggio = "<font color=red>Attenzione! non è
contenuto alcun messaggio.</font><br>";
$invia = "no"; }
if ($invia != "no")
{
$dest = tu@latuaemail.it";
$ogg = "Messaggio dal sito";
$int_mail = "From: miosito.it \n";
$int_mail .= "Reply to: $email\n\n";
$msg = "E-mail inviata dal mio sito.\n";
$msg . = "Nome: $nome\n";
$msg . = "E-mail: $email\n";
$msg . = "Messaggio\n $messaggio\n\n";
mail($dest, $ogg, $msg, $int_mail);
echo "<p>L'email è stata inviata!";
}
else if ($invia == "no")
{
echo "<font
color=red>Attenzione, hai commesso i seguenti errori:</font><br>";
echo "$err_nome";
echo "$err_email";
echo "$err_messaggio";
echo "$blocco_modulo";
}
}
?>
</body>
</html>
Malgrado la lunghezza del listato avrete
notato senz'altro alcune modifiche che ci permettono di non perdere i dati in
caso di debugging continuo del nostro programma. Infatti all'interno dei moduli
sono stati inseriti gli attributi value che permettono la conservazione
dei valori inseriti dall'utente. Inoltre potete notare che l'ultimo controllo
del listato, nel caso anche di un solo errore, manda in uscita tutti i
messaggi d'errore i quali, però, se non verificati in fase di controllo
precedente non
verranno stampati. Può però succedere che, nel mancato verificarsi di un errore,
il browser mandi in stampa dei messaggi di tipo "Warning"; per eliminare
questo inconveniente basta aprire il file php.ini contenuto in
C:/WINDOWS (o C:/WINNT) e settare la variabile display_errors
uguale a Off.
Adesso salvate il file con il nome modulo_completo.php ed eseguite
digitando sulla barra degli indirizzi del browser http://localhost/modulo_completo.php.